home *** CD-ROM | disk | FTP | other *** search
- // GETINFO SCRIPTING
- // Combined OFDb / IMDb (DE) import with description from OFDb. All other informations from IMDb
-
- (***************************************************
- * Movie importation script for: *
- * Online-Filmdatenbank(OFDb), *
- * http://www.ofdb.de *
- * and *
- * Internet Movie Database (IMDb), *
- * http://us.imdb.com *
- * *
- * (c) 2002 Fabian Filipczyk FFJaro@gmx.de *
- * *
- * Modified by Bad Joker badjoker@gmx.net *
- * *
- * For use with Ant Movie Catalog 3.3.0 *
- * www.antp.be/software/moviecatalog *
- * *
- * This program is free software; you can *
- * redistribute it and/or modify it under the *
- * terms of the GNU General Public License as *
- * published by the Free Software Foundation; *
- * either version 2 of the License, or (at your *
- * option) any later version. *
- ***************************************************)
-
- program OFDB_DE;
- var
- MovieName, IMDbURL, GerIMDbDURL: string;
-
- function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
- var
- i: Integer;
- begin
- result := -1;
- if StartAt < 0 then
- StartAt := 0;
- for i := StartAt to List.Count-1 do
- if Pos(Pattern, List.GetString(i)) <> 0 then
- begin
- result := i;
- Break;
- end;
- end;
-
- procedure AnalysePage(Address: string);
- var
- Page: TStringList;
- LineNr: Integer;
- begin
- Page := TStringList.Create;
- Page.Text := GetPage(Address);
- if pos('<title>OFDb - Übersicht der Filmdaten</title>', Page.Text) > 0 then
- begin
- AnalyseOFDBPage(Page)
- AnalyseIMDBDPage(Page)
- AnalyseIMDBPage(Page)
- DisplayResults
- end else
- begin
- if pos('Titel:</b><br><br><b></b> <i>Keine Ergebnisse</i>', Page.Text) > 0 then
- begin
- ShowMessage('Keine Ergebnisse unter dem Titel zu finden, bitte den Titel des Filmes Σndern!');
- if (MovieName <> '') or Input('OFDb', 'Bitte einen alternativen Titel eingeben :', MovieName) then
- begin
- AnalysePage('http://www.ofdb.de/view.php?page=suchergebnis&SText='+UrlEncode(MovieName)+'&Kat=All');
- end;
- end else
- begin
- PickTreeClear;
- LineNr := FindLine('<b>Titel:</b>', Page, 0);
- if LineNr > 0 then
- begin PickTreeAdd('Filme:', '');
- AddMoviesTitles(Page, LineNr);
- if PickTreeExec(Address) then
- AnalysePage(Address);
- end;
- end;
- end;
- Page.Free;
- end;
-
- procedure AddMoviesTitles(Page: TStringList; var LineNr: Integer);
- var
- Line: string;
- MovieTitle, MovieAddress: string;
- StartPos, EndPos: Integer;
- begin
- Line := Page.GetString(LineNr);
- repeat
- StartPos := pos('<a href=''view.php?page=film&fid=', Line);
- if StartPos > 0 then
- begin
- Delete(Line, 1, StartPos + 8);
- MovieAddress := copy(Line, 1, pos('''>', Line) - 1);
- StartPos := pos('''>', Line) +2;
- MovieTitle := copy(Line, StartPos, pos('</a>', Line) - StartPos);
- HTMLRemoveTags(MovieTitle);
- PickTreeAdd(MovieTitle , 'http://www.ofdb.de/' + MovieAddress);
- end;
- until (StartPos < 1);
- end;
-
- procedure AnalyseOFDBPage(Page: TStringList);
- var
- Line, Temp, Value: string;
- LineNr, BeginPos, EndPos: Integer;
- begin
-
- // Get IMDb URL + Set german IMDb URLs
- begin
- LineNr :=Findline('http://german.imdb.com/Title?', Page, 0);
- Line := Page.GetString(LineNr);
- BeginPos := pos('german.imdb.com/Title?', Line)-7;
- EndPos := pos('target', Line)-2;
- Value := copy(Line, BeginPos, EndPos - BeginPos);
- SetField(fieldURL, Value);
- BeginPos := pos('Title?', Line)+6;
- EndPos := pos('target', Line)-2;
- Temp := copy(Line, BeginPos, EndPos - BeginPos);
- Value := ('http://german.imdb.com/Details?' + Temp);
- GerIMDbDURL := Value;
- Value := ('http://us.imdb.com/Title?' + Temp);
- IMDbURL := Value;
- end;
-
- // Description
- LineNr := Findline('<b>Inhalt:</b>', Page, 0);
- if LineNr > -1 then
- begin
- LineNr :=Findline('<a href=''view.php?page=inhalt', Page, 0);
- Line := Page.GetString(LineNr);
- BeginPos := pos('<a href=''view.php?page=inhalt', Line)+9;
- EndPos := pos('''><b>[mehr]', Line);
- Value := copy(Line, BeginPos, EndPos - BeginPos);
- GetDescriptions(Value);
- end;
- end;
-
- procedure GetDescriptions(Address: string);
- var
- Line, Temp, Value: string;
- LineNr, BeginPos, EndPos: Integer;
- Page: TStringList;
-
- begin
- Temp:= '';
- Page := TStringList.Create;
- Page.Text := GetPage('http://www.ofdb.de/' + Address);
- LineNr := FindLine('Eine Inhaltsangabe von', Page, 0);
- if LineNr > -1 then
- begin
- Line := Page.GetString(LineNr);
- BeginPos := pos('</a></b><br><br>', Line) + 16;
- while (pos('<br />', Line) >0) do
- begin
- EndPos := pos('<br />', Line);
- Temp := Temp + copy(Line, BeginPos, EndPos - BeginPos);
- LineNr:=LineNr+1;
- Line:=Page.GetString(LineNr);
- BeginPos:=1;
- end;
- EndPos := pos('</font></p>', Line);
- Temp:= Temp + copy(Line, BeginPos, EndPos - BeginPos);
- Value:= Temp;
- SetField(fieldDescription, Value);
- end;
- Page.Free;
- end;
-
- procedure AnalyseIMDBDPage(Page: TStringList);
- var
- Line, Value, Value2, FullValue, GerTitle, Ger, Temp: string;
- BeginPos, EndPos, LineNr, TempPos: Integer;
- begin
-
- Page.Text := GetPage(GerIMDbDURL);
-
- //Producer
- LineNr := FindLine('<a name="producers"', Page, 0);
- if LineNr > -1 then
- begin
- FullValue := '';
- EndPos := 0;
- Line := Page.GetString(LineNr);
- BeginPos := Pos('<b class="blackcatheader">Produktion', Line);
- EndPos := Pos('<a name="music_original"', Line);
- if EndPos = 0 then
- begin
- EndPos := Pos('<a name="cinematographers"', Line);
- end;
- Line := copy(Line, BeginPos, EndPos - BeginPos);
- repeat
- BeginPos := Pos('<td valign="top">', Line);
- if BeginPos > 0 then
- begin
- Delete(Line, 1, BeginPos + 25);
- TempPos := Pos('">producer</a>', Line);
- if (TempPos > 0) and (TempPos < Pos('</tr>', Line)) then
- begin
- BeginPos := pos('">', Line) + 2;
- EndPos := pos('</a>', Line);
- if EndPos = 0 then
- EndPos := Pos('</td>', Line);
- Value := copy(Line, BeginPos, EndPos - BeginPos);
- if FullValue <> '' then
- FullValue := FullValue + ', ';
- FullValue := FullValue + Value;
- EndPos := Pos('</td></tr>', Line);
- Delete(Line, 1, EndPos);
- end;
- end else
- begin
- Line := '';
- end;
- until Line = '';
- HTMLDecode(FullValue);
- SetField(fieldProducer, FullValue);
- end;
-
- // Translated Title
- LineNr := FindLine('<i class="transl">', Page, 0);
- if LineNr > -1 then
- begin
- Ger := '';
- LineNr := LineNr - 1;
- repeat
- LineNr := LineNr + 1;
- Line := Page.GetString(LineNr);
- if Pos('[de]', Line) or Pos('(Germany)', Line) > 0 then
- begin
- BeginPos := pos('class="transl">', Line) + 14;
- EndPos := pos('[de]', Line);
- Ger := copy(Line, BeginPos, EndPos - BeginPos);
- end;
- until (pos('<b class="ch">', Line) > 0 );
- BeginPos := pos('>', Ger) + 1;
- EndPos := pos('(', Ger) - 1;
- GerTitle := copy(Ger, BeginPos, EndPos - BeginPos);
- HTMLDecode(GerTitle);
- SetField(fieldTranslatedTitle, GerTitle);
- end;
- end;
-
- procedure AnalyseIMDBPage(Page: TStringList);
- var
- Line, Value, Value2, FullValue: string;
- BeginPos, EndPos, LineNr: Integer;
- begin
-
- // Original Title & Year
- Page.Text := GetPage(IMDbURL);
- LineNr := FindLine('<title>', Page, 0);
- Line := Page.GetString(LineNr);
- if LineNr > -1 then
- begin
- BeginPos := pos('<title>', Line);
- if BeginPos > 0 then
- BeginPos := BeginPos + 7;
- EndPos := pos('(', Line);
- if EndPos = 0 then
- EndPos := Length(Line);
- Value := copy(Line, BeginPos, EndPos - BeginPos - 1);
- HTMLDecode(Value);
- SetField(fieldOriginalTitle, Value);
- BeginPos := pos('(', Line) + 1;
- if BeginPos > 0 then
- begin
- EndPos := pos(')', Line);
- Value := copy(Line, BeginPos, EndPos - BeginPos);
- SetField(fieldYear, Value);
- end;
- end;
-
- // Rating
- LineNr := FindLine('User Rating:', Page, 0);
- if LineNr > -1 then
- begin
- Line := Page.GetString(LineNr + 4);
- if Pos('awaiting', Line) = 0 then
- begin
- Line := Page.GetString(LineNr + 4);
- BeginPos := pos('<b>', Line) + 3;
- EndPos := BeginPos + 1;
- Value := copy(Line, BeginPos, EndPos - BeginPos);
- SetField(fieldRating, Value);
- end;
- end;
-
- // Director
- LineNr := FindLine('Directed by', Page, 0);
- if LineNr > -1 then
- begin
- FullValue := '';
- Line := Page.GetString(LineNr + 1);
- repeat
- BeginPos := pos('">', Line) + 2;
- EndPos := pos('</a>', Line);
- Value := copy(Line, BeginPos, EndPos - BeginPos);
- if (Value <> '(more)') and (Value <> '') then
- begin
- if FullValue <> '' then
- FullValue := FullValue + ', ';
- FullValue := FullValue + Value;
- end;
- Delete(Line, 1, EndPos);
- until Pos('</a>', Line) = 0;
- HTMLDecode(FullValue);
- SetField(fieldDirector, FullValue);
- end;
-
- // Actors
- LineNr := FindLine('Cast overview', Page, 0);
- if LineNr = -1 then
- LineNr := FindLine('cast overview', Page, 0);
- if LineNr = -1 then
- LineNr := FindLine('Credited cast', Page, 0);
- if LineNr = -1 then
- LineNr := FindLine('Complete credited cast', Page, 0);
- if LineNr > -1 then
- begin
- FullValue := '';
- Line := Page.GetString(LineNr);
- repeat
- BeginPos := Pos('<td valign="top">', Line);
- if BeginPos > 0 then
- begin
- Delete(Line, 1, BeginPos);
- Line := copy(Line, 25, Length(Line));
- BeginPos := pos('">', Line) + 2;
- EndPos := pos('</a>', Line);
- if EndPos = 0 then
- EndPos := Pos('</td>', Line);
- Value := copy(Line, BeginPos, EndPos - BeginPos);
- if (Value <> '(more)') and (Value <> '') then
- begin
- BeginPos := pos('.... </td><td valign="top">', Line);
- if BeginPos > 0 then
- begin
- EndPos := pos('</td></tr>', Line);
- BeginPos := BeginPos + 27;
- Value2 := copy(Line, BeginPos, EndPos - BeginPos);
- if Value2 <> '' then
- begin
- Value := Value + ' (als ' + Value2 + ')';
- end;
- end;
- if FullValue <> '' then
- FullValue := FullValue + ', ';
- FullValue := FullValue + Value;
- end;
- EndPos := Pos('</td></tr>', Line);
- Delete(Line, 1, EndPos);
- end else
- begin
- Line := '';
- end;
- until Line = '';
- HTMLDecode(FullValue);
- SetField(fieldActors, FullValue);
- end;
-
- //Country
- LineNr := FindLine('Country:', Page, 0);
- if LineNr > -1 then
- begin
- Line := Page.GetString(LineNr + 1);
- BeginPos := pos('/">', Line) + 3;
- EndPos := pos('</a>', Line);
- Value := copy(Line, BeginPos, EndPos - BeginPos);
- HTMLDecode(Value);
- SetField(fieldCountry, Value);
- end;
-
- //Category
- LineNr := FindLine('Genre:', Page, 0);
- if LineNr > -1 then
- begin
- Line := Page.GetString(LineNr + 1);
- BeginPos := pos('/">', Line) + 3;
- EndPos := pos('</a>', Line);
- Value := copy(Line, BeginPos, EndPos - BeginPos);
- HTMLDecode(Value);
- SetField(fieldCategory, Value);
- end;
- end;
-
- begin
- if CheckVersion(3,3,0) then
- begin
- MovieName := GetField(fieldTranslatedTitle);
- if MovieName = '' then
- MovieName := GetField(fieldOriginalTitle);
- if MovieName = '' then
- begin
- Input('OFDb', 'Bitte Titel eingeben :', MovieName)
- AnalysePage('http://www.ofdb.de/view.php?page=suchergebnis&SText='+UrlEncode(MovieName)+'&Kat=All');
- end else
- begin
- AnalysePage('http://www.ofdb.de/view.php?page=suchergebnis&SText='+UrlEncode(MovieName)+'&Kat=All');
- end;
- end else
- ShowMessage('Dieses Script ben÷tigt eine neuere Version von Ant Movie Catalog (mindestens Version 3.3.0)');
- end.
-